﻿using System;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

using NUnit.Framework;

using Working.Teste;
using Working.Domínio;

namespace Working.Domínio.Teste
{
  [TestFixture]
  public class TesteEntidade: TesteEntidadeDomínio<Entidade>
  {

    [SetUp]
    public void SetUp()
    {
      Random random = new Random();
      this.ValoresParaTeste.Clear();
      this.ValoresParaTeste.Add("OID", random.Next(Int32.MaxValue));
    }

    [Test]
    public void TestarConstrutor()
    {
      Entidade entidade = new Entidade();
      Assert.AreNotEqual(string.Empty, entidade.OID);
      Assert.AreNotEqual(null, entidade.OID);
    }

    [Test]
    public void TestarPropriedades()
    {
      Entidade entidade = new Entidade();
      this.TestarPropriedades(entidade, this.ValoresParaTeste);
    }

    [Test]
    public override void TestarSerialização()
    {
      Entidade entidade = new Entidade();
      this.TestarSerialização(entidade, this.ValoresParaTeste);
    }

    [Test]
    public override void TestarGetObjectData()
    {
      Entidade entidade = new Entidade();
      TestarGetObjectData(entidade, ValoresParaTeste);
    }

    [Test]
    public void TestarErrorInfo()
    {
      Entidade entidade = new Entidade();

      try
      {
        entidade.OID = -1;
      }
      catch{ }

      Assert.IsNotEmpty(entidade["OID"]);
      Assert.IsNotEmpty(entidade.Error);
    }

    [Test]
    public void TestarErrorInfoComValorCorrigido()
    {
      Entidade entidade = new Entidade();
      try
      {
        entidade.OID = -1;
      }
      catch { }
      Assert.IsNotEmpty(entidade["OID"]);
      Assert.IsNotEmpty(entidade.Error);

      entidade.OID = 1;
      Assert.IsNull(entidade["OID"]);
      Assert.IsNull(entidade.Error);
    }


    [Test]
    [ExpectedException(typeof(ValidationException))]
    public void TestarOIDComValorInválido()
    {
      Entidade entidade = new Entidade();
      entidade.OID = -1;
    }
  }
}
